package cartes;

import common.Constantes;
import plateau.Joueur;

public class Objet extends Carte {

    /*
     * Attributs
     */
    public int type; // Tête, main, etc
    public int classe = Constantes.UNDEFINED; // Prérequis en classe
    public int race = Constantes.UNDEFINED;
    public int classeInterdite = Constantes.UNDEFINED;
    public int raceInterdite = Constantes.UNDEFINED;
    public int classeBonus = Constantes.UNDEFINED;
    public int raceBonus = Constantes.UNDEFINED;
    public int bonusSpecifique = 0;
    public int sexe = Constantes.UNDEFINED;
    public int bonus; // Valeur de la carte
    public Boolean gros;
    public int prix;

    /*
     * Constructeur
     */
    public Objet(String nom, String description, int categorie, int type, int bonus, Boolean gros, String chemin) {
        // Constructeur de Carte
        super(nom, description, categorie, chemin);

        // Attributs génériques
        this.incidentFacheux = null;
        this.malusMonstre = null;
        this.actionCarte = null;
        this.actionClasse = null;

        // Attributs spécifiques
        this.type = type;
        this.bonus = bonus;
        this.gros = gros;
    }
    
    public Objet(String nom, String description, int categorie, int type, int classe, int race, int sexe, int bonus, Boolean gros, String chemin) {   
        this( nom, description, categorie, type, bonus, gros, chemin );
        
        this.classe = classe;
        this.race = race;
        this.sexe = sexe;        
    }

    public Objet(String nom, String description, int categorie, int type, int classe, int race, int classeInterdite, int raceInterdite, int sexe, int bonus, Boolean gros, String chemin) {
        this(nom, description, categorie, type, classe, race, sexe, bonus, gros, chemin);
        
        this.classeInterdite = classeInterdite;
        this.raceInterdite = raceInterdite;
    }
    
    public Objet(String nom, String description, int categorie, int type, int bonus, Boolean gros, String chemin, int classeBonus, int raceBonus, int bonusSpecifique ) {
        this( nom, description, categorie, type, bonus, gros, chemin );
        
        this.classeBonus = classeBonus;
        this.raceBonus = raceBonus;
        this.bonusSpecifique = bonusSpecifique;
    }
    
    /*
     * Méthodes
     */
    @Override
    public void combattre() {

    }

    @Override
    public void equiper() {

    }

    @Override
    public void fuir() {

    }

    @Override
    public void utiliser() {

    }

    @Override
    public void utiliser(Joueur j) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void utiliser(Joueur j, Joueur j2) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    @Override
    public void utiliserPouvoir() {

    }

    

    /*
     * Getters & Setters
     */
    public int getBonus() {
        return bonus;
    }

    public int getClasse() {
        return classe;
    }

    public void setClasse(int classe) {
        this.classe = classe;
    }

    public int getRace() {
        return race;
    }

    public void setRace(int race) {
        this.race = race;
    }

    public int getSexe() {
        return sexe;
    }

    public void setSexe(char sexe) {
        this.sexe = sexe;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }
    
    public Boolean getGros() {
        return gros;
    }

    public void setGros(Boolean gros) {
        this.gros = gros;
    }

    public int getPrix() {
        return prix;
    }

    public void setPrix(int prix) {
        this.prix = prix;
    }

    public int getClasseInterdite() {
        return classeInterdite;
    }

    public int getRaceInterdite() {
        return raceInterdite;
    }

    public int getBonusSpecifique() {
        return bonusSpecifique;
    }

    public int getClasseBonus() {
        return classeBonus;
    }

    public int getRaceBonus() {
        return raceBonus;
    }
    
    

    @Override
    public boolean equipable() {
        return true;
    }
    
    @Override
    public boolean utilisable() {
        return false;
    }
}